package com.ruoyi.common.utils;



import java.util.Arrays;

public class CommonUtils {

    public static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02X ", b));
        }
        return sb.toString().trim();
    }

    public static String hexToInt(String hexString) {
        if(StringUtils.isNotEmpty(hexString))
            return Integer.parseInt(hexString, 16)+"";
        return null;
    }

//    public static byte[] buildSendData(byte[] mData, byte command, byte[] cmdParam, int code) {
//        //0x68 0x01 0x03         0x03   0x06  0x01   0x2d 0x3e  0x16
//        //帧头  柜号 指令+参数长度  指令    层数 盒子号  crc校验码  帧脚
//        byte[] hexCode = new byte[]{(byte) code};
//        mData = append(mData, hexCode);  // 将状态码追加到原始数据末尾
//
//        byte[] hexCommandKey = new byte[]{command};  // 创建一个字节数组存储指令
//        if (cmdParam.length > 1 || (cmdParam.length == 1 && cmdParam[0] != 0)) {  // 如果参数存在且不全为0
//            hexCommandKey = append(hexCommandKey, cmdParam);  // 追加指令参数
//        }
//
//        int length = hexCommandKey.length;  // 计算指令及其参数的总长度
//        byte[] hexLen = new byte[]{(byte) length};  // 将长度转换为字节
//        mData = append(mData, hexLen);  // 将长度信息追加到数据末尾
//        mData = append(mData, hexCommandKey);  // 将指令及其参数追加到数据末尾
//
//        int crcSum = ModbusCrc16Utils.checkSum(mData);
//
//        // 高八位
//        byte highCrcSum = (byte) (crcSum >> 8);  // 取CRC校验值的高八位
//        byte[] highCrcSumBytes = new byte[]{highCrcSum};  // 转换为字节
//        mData = append(mData, highCrcSumBytes);  // 追加到数据末尾
//
//        // 低八位
//        byte lowCrcSum = (byte) (crcSum & 0xff);  // 取CRC校验值的低八位
//        byte[] lowCrcSumBytes = new byte[]{lowCrcSum};  // 转换为字节
//        mData = append(mData, lowCrcSumBytes);  // 追加到数据末尾
//
//        mData = append(mData, NettyServerConstant.frameFooter);  // 添加帧尾标识符
//        return mData;  // 返回最终的数据
//    }



//    public static byte[] buildSendData(byte[] mData, byte command, byte[] cmdParam, int code) {
//        byte[] hexCode = new byte[]{(byte) code};
//        // 追加 command
//        byte[] hexCommandKey = new byte[]{command};  // 创建一个字节数组存储指令
//        if (cmdParam.length > 1 || (cmdParam.length == 1 && cmdParam[0] != 0)) {  // 如果参数存在且不全为0
//            hexCommandKey = append(hexCommandKey, cmdParam);  // 追加指令参数
//        }
//        // 追加 command 和 cmdParam 到 mData
//        mData = append(mData, hexCommandKey);
//        // 追加 code
//        mData = append(mData, hexCode);
//
//        // 计算长度并追加
//        int length = hexCommandKey.length;  // 计算指令及其参数的总长度
//        byte[] hexLen = new byte[]{(byte) length};  // 将长度转换为字节
//        mData = append(mData, hexLen);  // 将长度信息追加到数据末尾
//
//        // 计算 CRC 校验值
//        int crcSum = ModbusCrc16Utils.checkSum(mData);
//        byte highCrcSum = (byte) (crcSum >> 8);  // 取CRC校验值的高八位
//        byte lowCrcSum = (byte) (crcSum & 0xff);  // 取CRC校验值的低八位
//        byte[] highCrcSumBytes = new byte[]{highCrcSum};  // 转换为字节
//        byte[] lowCrcSumBytes = new byte[]{lowCrcSum};  // 转换为字节
//        mData = append(mData, highCrcSumBytes);  // 追加到数据末尾
//        mData = append(mData, lowCrcSumBytes);  // 追加到数据末尾
//
//        // 追加帧尾标识符
//        mData = append(mData, NettyServerConstant.frameFooter);
//
//        return mData;  // 返回最终的数据
//    }
//    public static byte[] buildHeartData() {
//        byte[] heartData = new byte[]{NettyServerConstant.sendFrameHeader, 0x00, 0x01, NettyServerConstant.getCommand(10)};
//        int crcSum = ModbusCrc16Utils.checkSum(heartData);
//
//        byte highCrcSum = (byte) (crcSum >> 8);
//        byte lowCrcSum = (byte) (crcSum & 0xFF);
//
//        heartData = append(heartData, highCrcSum);
//        heartData = append(heartData, lowCrcSum);
//        heartData = append(heartData, NettyServerConstant.frameFooter);
//
//        return heartData;
//    }

    public static byte[] append(byte[] original, byte... additional) {
        byte[] result = Arrays.copyOf(original, original.length + additional.length);
        System.arraycopy(additional, 0, result, original.length, additional.length);
        return result;
    }
}
